#第二版
#app:add.o sub.o mul.o des.o main.o
#	gcc *.o -o app

#add.o:add.c
#	gcc -c -I../include/ add.c	
#sub.o:sub.c
#	gcc -c -I../include/ sub.c	
#mul.o:mul.c
#	gcc -c -I../include/ mul.c	
#des.o:des.c
#	gcc -c -I../include/ des.c	
#main.o:main.c
#	gcc -c -I../include/ main.c

#第三版
#1.内置函数：自动适配目录下源码文件
#wildcard：获取源文件名
#patsubst：%.c,%.o,$(SRCFILE)  字符串替换

#2.变量：增强重用性
#通用变量:
#INCLUDE= ../include #头文件路径
#TARGET=app #目标名
#CFLAGS=-c -g -Wall -I$(INCLUDE) #编译器选项
#CPPFLAGS=-E -D -o1#预处理选项
#LDFLAGS=-L../lib -lpthread #静态库 动态库的位置
#CC=gcc #编译器类型
#普通变量：
#SCRFILE=$(wildcard *.c) #获取源文件
#DESFILE=$(patsubst %.c,%.o,$(SRCFILE)) #字符串替换

#3.特殊变量:
#$<:依赖中的第一个
#$^:表示所有依赖
#$@:表示目标名

#4.内建语法：循环，生成二进制文件
#%.o:%.c
#	$(CC) $(CFLAGS) $<

#5.伪目标：避免文件名冲突


#6.功能性目标：使Makefile使用更加灵活

.PHONY:clear install distclear

INCLUDE=../include/
DIR_BIN=../bin
TARGET=app
CFLAGS=-c -g -Wall -I$(INCLUDE)
CC=g++
CPPFLAGS=-E -D -o1
LDFLAGS=-L../lib -lwiringPi -lpthread -I/usr/local/include/opencv4 -L/usr/local/lib  -lopencv_flann -lopencv_core -lopencv_videoio -lopencv_highgui -lopencv_imgproc -lopencv_ml

SRCFILE=$(wildcard *.cpp)
DESFILE=$(patsubst %.cpp,${DIR_BIN}/%.o,$(SRCFILE))

../$(TARGET):$(DESFILE)
	-@$(CC) $^ $(LDFLAGS) -o $@

${DIR_BIN}/%.o:%.cpp
	-@$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@

clear:
	@-rm $(DIR_BIN)/*.* -rf
	@-rm ../$(TARGET) -rf

install:
	@-sudo cp $(TARGET) /usr/bin/

distclear:
	sudo rm /usr/bin/$(TARGET)


